package com.itany.corejava.code07_面向对象.bms;

import java.util.Scanner;

/**
 * @author 石小俊
 * 2024年07月17日 13:46
 */
public class Start {

    private Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        new Start().showMenu();
        //Start start = new Start();
        //start.showMenu();
    }

    public void showMenu() {
        System.out.println("***********************欢迎进入紫金银行***********************");
        System.out.print("请选择服务(1.开户 2.登录):");
        int choice = sc.nextInt();
        switch (choice) {
            case 1:
                register();
                break;
            case 2:
                login();
                break;
            default:
                System.out.println("错误:您输入的选项有误,请重新输入");
                showMenu();
        }

    }

    /**
     * 该方法相当于在银行开户时用户填写的申请单
     * @return
     */
    public void register() {
        System.out.print("请选择开户的账户类型(1.储蓄账户 2.信用账户 3.贷款的储蓄账户 4.贷款的信用账户 5.返回主菜单):");
        int choice = sc.nextInt();
        Account account = null;
        switch (choice) {
            case 1:
                account = new SavingAccount();
                break;
            case 2:
                account = new CreditAccount();
                break;
            case 3:
                account = new LoanSavingAccount();
                break;
            case 4:
                account = new LoanCreditAccount();
                break;
            case 5:
                showMenu();
                break;
            default:
                System.out.println("错误:对不起,您输入的选项有误,请重新输入");
                register();
                break;
        }
        System.out.print("请输入户主姓名:");
        account.setName(sc.next());
        int i = 0;
        while (true) {
            System.out.print("请输入密码:");
            String password = sc.next();
            System.out.print("请再次输入密码:");
            String password2 = sc.next();
            if (password.equals(password2)) {
                // 如果两次密码输入一致
                // 设置设置密码
                account.setPassword(password);
                // 并退出循环
                break;
            }
            System.out.println("错误:两次输入的密码不一致,请重新输入");
            i++;
            if (i == 3) {
                System.out.println("错误:您输入的错误次数过多,已退出!");
                showMenu();
                return;
            }
        }

        System.out.print("请输入身份证号码:");
        account.setPersonId(sc.next());
        System.out.print("请输入手机号码:");
        account.setPhone(sc.next());
        System.out.print("请输入初始存储的金额:");
        account.setBalance(sc.nextDouble());

        // 开户的时候,根据所开的账户类型不同,所需要填写的信息也不同
        // 如果是存储账户,则数据填写完成
        // 如果是信用账户,则需要填写信用额度
        // 判断当前所开账户是否是信用账户
        if (account instanceof CreditAccount) {
            // 将当前账户类强制转换成对应子类
            CreditAccount creditAccount = (CreditAccount) account;
            System.out.print("请输入信用额度:");
            creditAccount.setLimit(sc.nextDouble());
        }

        // 调用银行的开户方法
        boolean flag = Bank.register(account);
        if (flag) {
            System.out.println("提示:恭喜您,开户成功,您的卡号为:" + account.getId());
        } else {
            System.out.println("错误:对不起,开户失败!");
        }

        showMenu();
    }

    public void login() {
        // 用户输入卡号与密码
        System.out.print("请输入卡号:");
        int id = sc.nextInt();
        System.out.print("请输入密码:");
        String password = sc.next();
        // 调用银行提供的登录方法,判断卡号与密码是否正确
        Account account = Bank.login(id, password);
        if (account != null) {
            // 如果登录成功之后,获取到当前登录进来的账户信息
            System.out.println("**************************欢迎进入紫金银行主菜单**************************");
            System.out.println("提示:欢迎您:" + account.getName());
            // 通过该账户信息进入到主菜单
            new AccountMenu(account).showMenu();
        } else {
            // 如果返回值为null,说明卡号或者密码错误
            System.out.println("错误:您输入的卡号或密码有误!");
            showMenu();
        }

    }

}
